//
// Created by Arnold on 2021/5/18.
//

#ifndef HASH_MAP_H
#define HASH_MAP_H
#include <stddef.h>
// 默认初始容量和负载因子阈值
#define INITIAL_CAPACITY 16
#define LOAD_FACTOR_THRESHOLD 0.75
// Map 结构定义
typedef struct MapEntry {
    char *key;
    void *value;
    void (*value_free)(void*); // 值释放函数指针
    struct MapEntry *next;
} MapEntry;

typedef struct {
    MapEntry **buckets;
    size_t capacity;
    size_t size;
} HashMap;
// 创建新的 Map
HashMap *map_create(size_t capacity);
// 添加键值对（带自动扩容和内存管理）
int map_put(HashMap *map, const char *key, void *value, void (*value_free)(void*));

// 获取值
void *map_get(HashMap *map, const char *key);
// 删除键值对
int map_remove(HashMap *map, const char *key);
// 新增函数：获取所有键的数组
char **map_keys(HashMap *map);
// 释放键数组
void map_free_keys(char **keys);
// 循环获取所有键
// callback: 回调函数，接收每个键作为参数
// context: 传递给回调函数的上下文数据
void map_iterate_keys(HashMap *map, void (*callback)(const char*, void*), void *context);
// 内存释放函数示例
void int_free(void *ptr);

void str_free(void *ptr);
// 获取Map大小
size_t map_size(HashMap *map);
// 打印Map状态
void map_print_status(HashMap *map);
#endif //FRAME_UTIL_H
